﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ApplicationGenerator.Lists.BusinessLogic;

namespace GUserInterface.WinForms.Lists
{
    public partial class HQLConfigurationControl : BaseWizardPage
    {
        private HQLListType _helperlistType;

        public HQLConfigurationControl()
        {
            InitializeComponent();
        }
        public override void ShowPage(Panel wizardSheet, ListConfiguration listConfiguration)
        {
            if (listConfiguration.Details == null)
            {
                _helperlistType = new HQLListType();
                listConfiguration.Details = _helperlistType;
                return;
            }

            _helperlistType = listConfiguration.Details as HQLListType;

            tbHQLQuerry.Text = _helperlistType.HQLQuerry;
            tbPrimaryKeyColumn.Text = _helperlistType.PrimaryKeyName;

            if (_helperlistType.AvailableColumns == null
                || _helperlistType.AvailableColumns.Count == 0)
            {
                return;
            }

            lbColumns.Items.Clear();
            foreach (var item in _helperlistType.AvailableColumns)
            {
                lbColumns.Items.Add(item.Name);
            }
        }

        public override void SaveConfiguration(ListConfiguration listConfiguration)
        {
            _helperlistType = listConfiguration.Details as HQLListType;
            _helperlistType.PrimaryKeyName = tbPrimaryKeyColumn.Text;
            _helperlistType.HQLQuerry = tbHQLQuerry.Text;

            IList<Column> availableColumns = new List<Column>();
            foreach (var item in lbColumns.Items)
            {
                availableColumns.Add(new Column(item as string));
            }

            _helperlistType.AvailableColumns = availableColumns;
        }

        public override bool ValidateConfiguration()
        {
            if (tbHQLQuerry.Text.Trim().Length == 0)
            {
                MessageBox.Show("Należy podać zapytanie HQL");
                return false;
            }

            if (tbPrimaryKeyColumn.Text.Trim().Length == 0)
            {
                MessageBox.Show("Należy podać nazwę kolumny z kluczem głównym");
                return false;
            }

            if (lbColumns.Items.Count == 0)
            {
                MessageBox.Show("Należy podać kolumny występujące w zapytaniu");
                return false;
            }

            if (!lbColumns.Items.Contains(tbPrimaryKeyColumn.Text.Trim()))
            {
                MessageBox.Show("Klucz główny musi występować na liście kolumn");
                return false;
            }

            return true;
        }

        private void btAdd_Click(object sender, EventArgs e)
        {
            if (tbColumnName.Text.Trim().Length == 0)
            {
                MessageBox.Show("Należy podać nazwę kolumny");
                return;
            }

            lbColumns.Items.Add(tbColumnName.Text.Trim());
        }

        private void btDelete_Click(object sender, EventArgs e)
        {
            if (lbColumns.SelectedItem == null)
            {
                MessageBox.Show("Należy zaznaczyć kolumnę do usunięcia");
                return;
            }

            lbColumns.Items.Remove(lbColumns.SelectedItem);
        }
    }
}
